package tablemodels;

import java.util.ArrayList;

import javax.swing.table.DefaultTableModel;

import utils.Criterion;

/**
 * 
 * @author dernasherbrezon
 *
 */
public class CriterionModel extends DefaultTableModel
{
	public int[]data;
	private String[]header;
	
	public CriterionModel(ArrayList<Criterion> criterions)
	{
		data = new int[criterions.size()];
		header = new String[criterions.size()];
		for(int i=0;i<criterions.size();i++)
		{
			header[i] = String.valueOf(criterions.get(i).index);
		}
	}
	
	@Override
	public void fireTableDataChanged()
	{
		super.fireTableDataChanged();
	}
	@Override
	public int getColumnCount()
	{
		if(header!=null)
		{
			return header.length;
		}
		return 0;
	}
	@Override
	public int getRowCount()
	{
		return 1;
	}
	
	@Override
	public Class<?> getColumnClass(int columnIndex)
	{
		return Integer.class;
	}
	
	@Override
	public boolean isCellEditable(int row, int column)
	{
		return true;
	}
	
	@Override
	public void setValueAt(Object aValue, int row, int column)
	{
		data[column] = (Integer)aValue;
	}
	
	@Override
	public Object getValueAt(int row, int column)
	{
		return data[column];
	}
	
	@Override
	public String getColumnName(int column)
	{
		return header[column];
	}
	
	public void checkCorrectValues() throws Exception
	{
		//Должны использовать значения 1,2,3,4 в сумме 10
		checkForValue(1);
		checkForValue(2);
		checkForValue(3);
		checkForValue(4);
	}
	
	private void checkForValue(int value) throws Exception
	{
		int numRepeats = 0;
		for(int i=0;i<data.length;i++)
		{
			if(data[i]==value)
			{
				numRepeats++;
			}
		}
		if(numRepeats==0)
		{
			throw new Exception("Значение \"" + value + "\" не присутствует в таблице");
		}
		if(numRepeats>1)
		{
			throw new Exception("Значение \"" + value + "\" указано больше одного раза");
		}
	}
}
